package com.bear.pk;


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

public class AutoCode {
    public static void main(String[] args) {
        //构建一个自动生成器的对象
        //构建一个自动生成器的对象
//        AutoGenerator autoGeneratorrator = new AutoGenerator();
//
//        //数据源配置
//        DataSourceConfig dataSourceConfig = new DataSourceConfig();
//        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/pk?characterEncoding=utf8&serverTimezone=UTC");
//        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
//        dataSourceConfig.setUsername("root");
//        dataSourceConfig.setPassword("root");
//        dataSourceConfig.setDbType(DbType.MYSQL);
//
//        //全局配置
//        GlobalConfig globalConfig = new GlobalConfig();
//        String path = System.getProperty("user.dir");//获取当前目录
//        globalConfig.setOutputDir(path + "/src/main/java");  //将生成好的代码放到指定目录
//        globalConfig.setAuthor("pk");  //作者信息
//        globalConfig.setOpen(false);    //不打开资源管理器
//        globalConfig.setFileOverride(false);    //是否覆盖
//        globalConfig.setServiceName("%sService");      //去Service的I前缀
//        globalConfig.setIdType(IdType.AUTO);        //主键
//
//
//        //包的配置
//        PackageConfig packageConfig = new PackageConfig();
//        packageConfig.setParent("com.bear.pk");
//        packageConfig.setEntity("entity");
//        packageConfig.setMapper("mapper");
//        packageConfig.setService("service");
//        packageConfig.setServiceImpl("serviceImpl");
//        packageConfig.setController("controller");
//
//        //策略设置
//        StrategyConfig strategyConfig = new StrategyConfig();
//        strategyConfig.setInclude("user");    //设置要映射的表名
//        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
//        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
//        strategyConfig.setEntityLombokModel(true);  //开启lombok注解
//        strategyConfig.setRestControllerStyle(true);    //支持rest风格
//        strategyConfig.setControllerMappingHyphenStyle(true);   //url支持下划线命名
//
//        autoGenerator.setGlobalConfig(globalConfig);    //设置全局配置
//        autoGenerator.setDataSource(dataSourceConfig);      //设置数据源
//        autoGenerator.setPackageInfo(packageConfig);    //包的配置
//        autoGenerator.setStrategy(strategyConfig);      //设置策略
//
//        autoGenerator.execute();    //执行
//获取当前目录
        String path = System.getProperty("user.dir");
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/pk?characterEncoding=utf8&serverTimezone=UTC", "root", "root")
                .globalConfig(builder -> builder.author("pk")
                        .outputDir(path + "/src/main/java")
                        .fileOverride()
                        .disableOpenDir()
                        .dateType(DateType.TIME_PACK)
                        .commentDate("yyyy-mm-dd")
                ).packageConfig(builder -> builder.parent("com.bear.pk").entity("entity").mapper("mapper").service("service").serviceImpl("serviceImpl").controller("controller"))
                .strategyConfig(builder ->
                        builder.addInclude("user_roles")
                                .entityBuilder()
                                .enableTableFieldAnnotation()
                                .logicDeleteColumnName("is_deleted")
                                .logicDeletePropertyName("isDeleted")
                                .addTableFills(new Column("created_at", FieldFill.INSERT))
                                .addTableFills(new Column("updated_at", FieldFill.INSERT_UPDATE))
                                // 阶段2：Mapper策略配置
                                .mapperBuilder()
                                // 开启 @Mapper 注解。
                                // 会在mapper接口上添加注解[@Mapper]
                                .enableMapperAnnotation()
                                // 启用 BaseResultMap 生成。
                                // 会在mapper.xml文件生成[通用查询映射结果]配置。
                                .enableBaseResultMap()
                                // 启用 BaseColumnList。
                                // 会在mapper.xml文件生成[通用查询结果列 ]配置
                                .enableBaseColumnList()
                                // 阶段4：Controller策略配置
                                .controllerBuilder()
                                // 会在控制类中加[@RestController]注解。
                                .enableRestStyle()
                                // 开启驼峰转连字符
                                .enableHyphenStyle().build()
                ).templateEngine(new FreemarkerTemplateEngine()).execute();
    }
}
